package itheima.zuoye.Test1;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
    //读取work.txt文件，统计每个数据出现的次数，并打印出现次数最多的6个数据,用hutool完成
    public static void main(String[] args) {
        //先读取work.txt文件中的内容
        String filePath = "D:\\javabasepro\\java AdvanceProject\\day14\\src\\itheima\\zuoye\\Test1\\work.txt";
        String content = FileUtil.readUtf8String(filePath);
        // 2. 统计每个数字出现的次数
        Map<Integer, Integer> frequencyMap = countFrequency(content);

        // 3. 找出出现次数最多的 6 个数字并打印
        printTopSix(frequencyMap);
    }

    /**
     * 统计每个数字出现的次数
     *
     * @param content 文件内容
     * @return 数字及其出现次数的映射
     */
    private static Map<Integer, Integer> countFrequency(String content) {
        Map<Integer, Integer> frequencyMap = new HashMap<>();
        if (StrUtil.isNotBlank(content)) {
            // 按行分割
            String[] lines = StrUtil.splitToArray(content, '\n');
            for (String line : lines) {
                // 按逗号分割
                String[] numbers = StrUtil.splitToArray(line, ',');
                for (String number : numbers) {
                    if (StrUtil.isNumeric(number)) {
                        int num = Integer.parseInt(number.trim());
                        frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
                    }
                }
            }
        }
        return frequencyMap;
    }

    /**
     * 打印出现次数最多的 6 个数字
     *
     * @param frequencyMap 数字及其出现次数的映射
     */
    private static void printTopSix(Map<Integer, Integer> frequencyMap) {
        // 将映射转换为列表以便排序
        List<Map.Entry<Integer, Integer>> list = new ArrayList<>(frequencyMap.entrySet());
        // 按值（出现次数）降序排序
        list.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));

        // 打印前 6 个元素
        System.out.println("出现次数最多的 6 个数字：");
        for (int i = 0; i < 6 && i < list.size(); i++) {
            Map.Entry<Integer, Integer> entry = list.get(i);
            System.out.println("数字: " + entry.getKey() + ", 出现次数: " + entry.getValue());
        }
    }


}

